package org.catspaw.cherubim.route.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Key {

	String label() default "";
	
	/**
	 * 路由应用范围
	 * 如果指定应用范围，则这个路由只对指定的类（dao或service）有效
	 * @return
	 */
	Class<?>[] assignTo() default Object.class;

	/**
	 * 属性名
	 * 表示此注解作用于标注对象的属性（标注到方法上时表示方法所属对象的属性）
	 * @return
	 */
	String property() default "";

	String type() default "";

	String typeProperty() default "";

	Access access() default Access.DEFAULT;

	public enum Access {
		/**
		 * 默认值（如果作用域是默认，需要专门的路由处理链来处理）
		 */
		DEFAULT,
		/**
		 * 只读，如果策略是只读，则根据路由查找数据源时会查找只读数据源
		 */
		READ,
		/**
		 * 只写，作用与读写相同
		 */
		WRITE,
		/**
		 * 读写，如果策略是读写，则根据路由查找数据源时会查找读写数据源
		 */
		READ_WRITE
	}
}
